package main

import (
	"fmt"
	"os"
)

func main() {
	testDefer()
	testPanic()
	//testExit()
	fmt.Println("After panic")
}

/**
panic will exit with code 2
golang推荐使用返回错误值，而不是像Java一样抛出各种异常，然后handle
*/
func testPanic() {
	defer fmt.Println("Panic will execute defer")
	panic("Problem")
}

/**
自定义退出程序
*/
func testExit() {
	defer fmt.Println("os exit will not execute defer")
	os.Exit(3)
}

/**
函数返回的时候执行defer操作，一般用来关闭文件流、连接等
*/
func testDefer() {
	defer fmt.Println("Invoke end")
	fmt.Println("Invoke")
}
